package com.yumi.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.LocalDateTime;

/**
 * 培训计划实体类
 */
@Data
@TableName("work_training_plan")
@Schema(description = "培训计划信息")
public class TrainingPlan {

    /**
     * 培训计划ID
     */
    @TableId(type = IdType.AUTO)
    @Schema(description = "培训计划ID")
    private Long id;

    /**
     * 培训标题
     */
    @NotBlank(message = "培训标题不能为空")
    @Size(max = 200, message = "培训标题长度不能超过200个字符")
    @Schema(description = "培训标题", required = true)
    private String title;

    /**
     * 培训内容
     */
    @NotBlank(message = "培训内容不能为空")
    @Schema(description = "培训内容", required = true)
    private String content;

    /**
     * 培训类型：1-新员工入职培训 2-专业技能培训 3-管理能力培训 4-企业文化培训 5-安全合规培训
     */
    @NotNull(message = "培训类型不能为空")
    @Schema(description = "培训类型：1-新员工入职培训 2-专业技能培训 3-管理能力培训 4-企业文化培训 5-安全合规培训", required = true)
    private Integer type;

    /**
     * 培训方式：1-线下面授 2-线上直播 3-录播课程 4-混合模式
     */
    @NotNull(message = "培训方式不能为空")
    @Schema(description = "培训方式：1-线下面授 2-线上直播 3-录播课程 4-混合模式", required = true)
    private Integer method;

    /**
     * 培训开始时间
     */
    @NotNull(message = "培训开始时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "培训开始时间", required = true)
    private LocalDateTime startTime;

    /**
     * 培训结束时间
     */
    @NotNull(message = "培训结束时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "培训结束时间", required = true)
    private LocalDateTime endTime;

    /**
     * 培训地点
     */
    @Schema(description = "培训地点（线下培训必填）")
    private String location;

    /**
     * 培训讲师
     */
    @NotBlank(message = "培训讲师不能为空")
    @Size(max = 50, message = "培训讲师名称长度不能超过50个字符")
    @Schema(description = "培训讲师", required = true)
    private String trainer;

    /**
     * 最大参与人数
     */
    @Schema(description = "最大参与人数", defaultValue = "50")
    private Integer maxParticipants;

    /**
     * 培训状态：0-未开始 1-进行中 2-已结束
     */
    @Schema(description = "培训状态：0-未开始 1-进行中 2-已结束", defaultValue = "0")
    private Integer status;

    /**
     * 创建人ID
     */
    @NotNull(message = "创建人ID不能为空")
    @Schema(description = "创建人ID", required = true)
    private Long createUserId;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "创建时间", accessMode = Schema.AccessMode.READ_ONLY)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "更新时间", accessMode = Schema.AccessMode.READ_ONLY)
    private LocalDateTime updateTime;

    /**
     * 是否删除（0-未删除，1-已删除）
     */
    @TableField("is_deleted")
    @TableLogic
    @Schema(description = "是否删除", hidden = true)
    private Integer deleted;
} 